<?php 

// +----------------------------  优惠券相关控制器 ------------------------------------------

namespace app\controller;

use app\BaseController;
use app\dto\R;
use app\model\Coupon;
use app\model\Goods;
use app\model\UserCoupons;
use think\facade\Request;

class CouponController extends BaseController{

    // 根据优惠券id查询优惠券信息
    public function getCouponById($couponId)
    {
        // 参数验证
        if (empty($couponId)) {
            return json(R::error("优惠券ID为空"));
        }

        // 查询优惠券信息
        $coupon = Coupon::where('coupon_id', $couponId)->find();

        if (!$coupon) {
            return json(R::error("没有找到优惠券"));
        } else {
            return json(R::result(1, "获取成功", $coupon));
        }
    }

    // 获取用户已使用的优惠券
    public function getUsedCoupons($userId)
    {
        // 参数验证
        if (empty($userId)) {
            return json(R::error("用户ID为空"));
        }

        // 关联优惠券模型
        $usedCoupons = UserCoupons::where('user_id', $userId)
                    ->where('used', 1) // 1表示已使用
                    ->with(['coupon'])
                    ->select();
        
        if ($usedCoupons->isEmpty()) {
            return json(R::error("没有找到已使用的优惠券"));
        } else {
            return json(R::result(1, "获取成功", $usedCoupons));
        }
    }

    // 获取用户所有优惠券，传入用户ID
    public function getUserCoupons($userId)
    {
        // 参数验证
        if (empty($userId)) {
            return json(R::error("用户ID为空"));
        }

        // 关联优惠券模型
        $userCoupons = UserCoupons::where('user_id', $userId)
                    ->with(['coupon'])
                    ->where('used', 0) // 0表示未使用
                    ->select();
        
        if ($userCoupons->isEmpty()) {
            return json(R::error("没有找到优惠券"));
        } else {
            return json(R::result(1, "获取成功", $userCoupons));
        }
    }


    // 用户使用优惠券（优惠券的扣减），接收用户ID和优惠券ID
    public function useCoupon()
    {

        $userId = Request::post('userId'); // 用户ID
        $couponId = Request::post('couponId'); // 优惠券ID

        // 查询用户的优惠券
        $userCoupon = UserCoupons::where('user_id', $userId)
                    ->where('coupon_id', $couponId)
                    ->where('used', 0) // 0表示未使用
                    ->find();

        if (!$userCoupon) {
            return json(R::error("优惠券不存在或已使用"));
        }

        // 更新优惠券状态为已使用
        $userCoupon->used = 1;
        $userCoupon->use_time = date('Y-m-d H:i:s'); // 使用时间
        $userCoupon->save();

        return json(R::ok("使用成功", true));
    }


    /*
        /检查用户当此购物可用优惠券,传入用户ID和商品ID，
        1.根据用户ID查询用户所有优惠券
        2.根据优惠券ID查询优惠券信息
        3.根据商品ID查询商品所属店铺
        4.根据店铺ID过滤出可用的优惠券
    */
    public function getAvailableCoupon($userId, $goodsId){
        // 参数验证
        if (empty($userId) || empty($goodsId)) {
            return json(R::error("用户ID或商品ID为空"));
        }

        // 查询用户的所有优惠券
        $userCoupons = UserCoupons::where('user_id', $userId)->where('used', 0)->select();

        if ($userCoupons->isEmpty()) {
            return json(R::error("没有可用的优惠券"));
        }

        // 获取商品所属店铺ID
        $shopId = Goods::where('goods_id', $goodsId)->value('owner_store_id');

        // 根据店铺ID过滤出可用的优惠券
        $availableCoupons = [];

        foreach ($userCoupons as $userCoupon) {
            $coupon = Coupon::where('coupon_id', $userCoupon->coupon_id)
                            ->where('bind_store', $shopId)
                            ->find();
            if ($coupon) {
                $availableCoupons[] = $coupon;
            }
        }

        if (empty($availableCoupons)) {
            return json(R::error("没有可用的优惠券"));
        } else {
            return json(R::result(1, "获取成功", $availableCoupons));
        }
    }


    // 领取优惠券， 通过路径参数传入用户ID和优惠券ID
    public function receiveCoupon($userId, $couponId)
    {

        // 参数验证
        if (empty($userId) || empty($couponId)) {
            return json(R::error("用户ID或优惠券ID为空"));
        }

        // 查询优惠券
        $coupon = Coupon::where('coupon_id', $couponId)->find();

        if (!$coupon) {
            return json(R::error("优惠券不存在"));
        }

        // 创建用户优惠券记录
        UserCoupons::create([
            'user_id' => $userId,
            'coupon_id' => $couponId,
            'used' => 0, // 0表示未使用
            'create_time' => date('Y-m-d H:i:s'),
        ]);

        return json(R::result(1, "领取成功", true));
    }

    // 根据店铺ID获取优惠券列表
    public function getCouponsByShopId($shopId)
    {
        // 参数验证
        if (empty($shopId)) {
            return json(R::error("店铺ID为空"));
        }

        // 查询优惠券
        $coupons = Coupon::where('bind_store', $shopId)->select();

        if ($coupons->isEmpty()) {
            return json(R::error("没有找到优惠券"));
        } else {
            return json(R::result(1, "获取成功", $coupons));
        }
    }

    // 根据用户ID 和 优惠券ID 检查用户是否领取过优惠券
    public function checkUserCoupon()
    {
        $userId = Request::post('userId');
        $couponId = Request::post('couponId');

        // 参数验证
        if (empty($userId) || empty($couponId)) {
            return json(R::error("用户ID或优惠券ID为空"));
        }

        // 查询用户领取的优惠券
        $userCoupon = UserCoupons::where('user_id', $userId)
                    ->where('coupon_id', $couponId)
                    ->where('used', 0) // 0表示未使用
                    ->find();

        if ($userCoupon) {
            return json(R::result(1, "已领取", true));
        } else {
            return json(R::result(0, "未领取", false));
        }
    }
}